Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(tags): adds legacy_tag_formats and ignored_tag_formats settings #1297

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

noirbizarre
Copy link
Member

Description

This PR add 2 new settings to handle tag formats;

  • legacy_tag_formats allowing tag format to change over time while retaining the ability to work with legacy version
  • ignored_tag_formats to specify expected tag that should not raise InvalidVersion.

So projects which change tag formats and have expected but non-version tags can have these settings:

tag_format = "v${version}"
legacy_tag_formats = [
	"${version}",
	"project-prefix-${version}",
]
ignored_tag_formats = [
	"stable",
	"other-project-*",
]

By doing so, I had to start grouping tag handling and introduce a tags.TagRules object which is responsible for handling all tags rules, initially spread over tag_format, version_schemes and version_providers

Checklist

  • Add test cases to all the changes you introduce
  • Run ./scripts/format and ./scripts/test locally to ensure this change passes linter check and test
  • Test the changes on the local machine manually
  • Update the documentation for the changes

Expected behavior

  • I can change tag format and still being able to:
    • bump versions (aka. find the increment and commits range)
    • generate changelog (full, incremental, version range)
  • I can generate a changelog without warnings for expected tags

Steps to Test This Pull Request

  • create a project
  • set version_provider = "scm" (not mandatory but allows testing the full scope)
  • bump some versions with an initial tag_format
  • move current tag_format in legacy_tag_format and define a new tag_format
  • bump a version with changelog:
    • current version should be properly identified
    • increment should properly been found
    • new version should be correct
    • generated changelog generation should be correct (both new and old version formats)
    • new tag should respect the new tag_format

then:

  • add random-* to ignored_tag_formats
  • tag any commit with random-tag
  • run cz changelog
    • there shouldn't be any warning

Additional context

There might be a 2nd PR handling a changelog_version_format setting to customize the version rendering in the changelog so:

  • it's not the tag format anymore (problematic with some prefixes, like for monorepos)
  • have a uniform version display across tag_format changes

Copy link

codecov bot commented Nov 25, 2024

Codecov Report

Attention: Patch coverage is 99.43503% with 1 line in your changes missing coverage. Please review.

Project coverage is 97.66%. Comparing base (120d514) to head (c1f2e4f).
Report is 502 commits behind head on master.

Files with missing lines Patch % Lines
commitizen/commands/bump.py 92.85% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #1297      +/-   ##
==========================================
+ Coverage   97.33%   97.66%   +0.32%     
==========================================
  Files          42       56      +14     
  Lines        2104     2610     +506     
==========================================
+ Hits         2048     2549     +501     
- Misses         56       61       +5     
Flag Coverage Δ
unittests 97.66% <99.43%> (+0.32%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@noirbizarre noirbizarre added the type: feature A new enhacement proposal label Nov 26, 2024
@noirbizarre noirbizarre force-pushed the feat/known-tag-formats branch 2 times, most recently from f7f6041 to 6eeeb41 Compare November 26, 2024 01:03
@noirbizarre noirbizarre force-pushed the feat/known-tag-formats branch from 6eeeb41 to dc08a79 Compare November 28, 2024 00:46
@noirbizarre noirbizarre force-pushed the feat/known-tag-formats branch from dc08a79 to c1f2e4f Compare November 28, 2024 00:52
@Lee-W
Copy link
Member

Lee-W commented Dec 6, 2024

wow, this is a huge one. I'll be mostly out for the following month but will try to take a look after I'm back

@noirbizarre
Copy link
Member Author

noirbizarre commented Dec 6, 2024

Yes, I know, sorry. I had this idea long ago, just not had time to cover it all until now.
Actually, this is as of today the main remaining pain point I have. I had to migrate a lot of projects on different tagging conventions in a corporate environment and as of today it involves lots of manual steps as well as features lost.
So 🎉 there it is, this one fixes all my cases (and I'm sure I'm not the only one facing those).

In the meantime, enjoy your holidays !

@woile
Copy link
Member

woile commented Dec 7, 2024

Could you add a tutorial for this case? Otherwise it feels like we are adding a lot of features and it's unclear what a user can do with them.
I'll review it this week 👍🏻

@noirbizarre
Copy link
Member Author

I completed the monorepo tutorial and added a FAQ entry but yes, I can totally write a full tutorial on changing tag convention while keeping backward compatibility 👍🏽

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants